package com.graduation.project.service.topic;

import com.baomidou.mybatisplus.extension.service.IService;
import com.graduation.project.entity.dto.task.SaveOrUpdateTaskDTO;
import com.graduation.project.entity.dto.task.ListTaskDTO;
import com.graduation.project.entity.dto.UpdateStatusDTO;
import com.graduation.project.entity.po.Task;
import com.graduation.project.utils.ResultUtil;

public interface TaskService extends IService<Task> {

    /**
     * 新增课题-指导教师下拉数据（权限：新增课题权限、修改课题权限）
     * @return ResultUtil
     */
    ResultUtil<?> listAdviserData();

    /**
     * 获取课题详情（权限：查看详情权限、修改课题权限）
     * @param id 课题id
     * @return ResultUtil
     */
    ResultUtil<?> getTaskDetails(Long id);

    /**
     * 新增课题（权限：新增课题权限）
     * @param input 新增|修改课题输入类
     * @return ResultUtil
     */
    ResultUtil<?> addTask(SaveOrUpdateTaskDTO input);

    /**
     * 修改课题（权限：修改课题权限）
     * @param input 新增|修改课题输入类
     * @return ResultUtil
     */
    ResultUtil<?> updateTask(SaveOrUpdateTaskDTO input);

    /**
     * 系主任审核课题
     * @param input 修改状态输入类
     * @return ResultUtil
     */
    ResultUtil<?> directorAuditTask(UpdateStatusDTO input);

    /**
     * 副院长审核课题
     * @param input 修改状态输入类
     * @return ResultUtil
     */
    ResultUtil<?> subdecanalAuditTask(UpdateStatusDTO input);

    /**
     * 删除课题
     * @param id 课题id
     * @return ResultUtil
     */
    ResultUtil<?> deleteTask(Long id);

    /**
     * （条件）查询课题
     * @param input 条件查询输入类
     * @return ResultUtil
     */
    ResultUtil<?> listTaskByCondition(ListTaskDTO input);

    /**
     * 学生选择课题（权限：选择课题权限）
     * @param id 课题id
     * @return ResultUtil
     */
    ResultUtil<?> chooseTask(Long id);

    /**
     * 教师审核选题
     * @param input 修改状态输入类
     * @return ResultUtil
     */
    ResultUtil<?> teacherAuditTask(UpdateStatusDTO input);

    /**
     * 学生取消选题
     * @param id 课题id
     * @return ResultUtil
     */
    ResultUtil<?> cancelChooseTask(Long id);
}
